package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IOfferInfoDAO;
import org.jsola.hr.dto.OfferInfoAddDTO;
import org.jsola.hr.dto.OfferInfoUpdateDTO;
import org.jsola.hr.entity.OfferInfoDO;
import org.jsola.hr.query.OfferInfoQuery;
import org.jsola.hr.vo.OfferInfoListVO;
import org.jsola.hr.vo.OfferInfoVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface IOfferInfoService extends IService<IOfferInfoDAO, OfferInfoDO> {

    /**
     * 新增员工offer信息
     * @param offerInfoAddDTO 新增员工offer信息DTO
     * @param tokenUser 当前用户
     * @return 员工offer信息详情信息
     */
    OfferInfoVO save(OfferInfoAddDTO offerInfoAddDTO, TokenUser tokenUser);

    /**
     * 修改员工offer信息
     * @param offerInfoUpdateDTO 修改员工offer信息DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(OfferInfoUpdateDTO offerInfoUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工offer信息，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param offerInfoIds 员工offer信息id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...offerInfoIds);

    /**
     * 根据员工offer信息id查找
     * @param offerInfoId 员工offer信息id
     * @param siteId 所属站点id
     * @return 员工offer信息详情信息
     */
    OfferInfoVO selectById(String offerInfoId, String siteId);

    /**
     * 查询员工offer信息
     * @param offerInfoQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工offer信息列表信息
     */
    List<OfferInfoListVO> select(OfferInfoQuery offerInfoQuery, String siteId);

    /**
    * 查询员工offer信息记录数
    * @param offerInfoQuery 查询条件
    * @param siteId 所属站点id
    * @return 员工offer信息记录数
    */
    int selectCount(OfferInfoQuery offerInfoQuery, String siteId);

    /**
     * 分页查询员工offer信息
     * @param offerInfoQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工offer信息列表信息
     */
    Page<OfferInfoListVO> selectPage(OfferInfoQuery offerInfoQuery, String siteId);


    /**
     * 根据员工offer信息id查找
     * @param offerInfoId 员工offer信息id
     * @param siteId 所属站点id
     * @return 员工offer信息
     */
    OfferInfoDO selectDOById(String offerInfoId, String siteId);

    /**
     * 查询员工offer信息
     * @param offerInfoQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工offer信息列表
     */
    List<OfferInfoDO> selectDO(OfferInfoQuery offerInfoQuery, String siteId);
    /**
     * 新增员工offer信息并发送给候选人
     * @param offerInfoAddDTO 新增员工offer信息DTO
     * @param tokenUser 当前用户
     * @return 员工offer信息详情信息
     */
    OfferInfoVO saveAndSend(OfferInfoAddDTO offerInfoAddDTO, TokenUser tokenUser);

//    /**
//     * 发送邮件给候选人
//     * @param offerInfoDO 员工offer信息DO
//     * @return 发送结果
//     */
//    Result<Boolean> sendOfferEmail(OfferInfoDO offerInfoDO, TokenUser tokenUser);

    /**
     * 查询员工offer信息
     * @param offerInfoId 员工offer信息id
     * @param siteId 所属站点id
     * @return 员工offer信息
     */
    OfferInfoVO getOfferInfoById(String offerInfoId, String siteId);
}


